/*
 * Example.h
 *
 *  Created on: Oct 3, 2008
 *      Author: V
 */

// change these as appropriate
#ifndef ARGUMENT_H_
#define ARGUMENT_H_

#include "../string/String.h"
#include "../semantics/AnonymousStatement.h"

struct AnonymousStatementTag;


typedef struct ArgumentTag
{
	struct AnonymousStatementTag* statement;
	// or
	pString parameterVariable;
	// or
	pString stringLiteral;

	pString (*eval)(struct ArgumentTag*, struct AnonymousStatementTag*);

	pString (*toString)(struct ArgumentTag*);

} Argument, *pArgument, **ArgumentList;

pArgument Argument_new();

pArgument Argument_newFromCString(char* cString);

pArgument Argument_newFromAnonymousStatement(
		struct AnonymousStatementTag* statement);

pString Argument_eval(pArgument, pAnonymousStatement owner);

ArgumentList Argument_cloneList(ArgumentList);

pString Argument_toString(pArgument argument);

pString ArgumentList_toString(ArgumentList list);

int ArgumentList_getLength(ArgumentList list);

#endif /* ARGUMENT_H_ */
